Introduction

As noted by the FSC’s analysis of ACLED conflict data, there was no discernible relationship between food security partners’ presence and the incidence of conflict in 2021. This document intends to inform strategic and operational decision making and provides evidence intended to guide geographic prioritisation at the township level. For more information, please see the FSC’s Conflict Analysis.




1. Distribution of conflict events in Myanmar


Sagaing saw the highest number of conflict events as well as conflict as well as conflict-related fatalities in 2012. It experienced more than three times as many conflict-related fatalities than the next-highest state/region – Magway. This is a significant shift in the pattern of conflict in Myanmar, which has traditionally revolved around Kachin, Rakhine and Shan.

Kayah, Chin and Sagaing had the highest number of conflict fatalities per capita in 2021.



As can be seem from the barplots above, the distribution of conflict events and fatalities is not even, being skewed to a few states/regions. This is also evident at township level. In the scatterplot below, the averages of the number of conflict events and the number of fatalities at the township level have been marked by the dotted red lines, dividing the plot into four quadrants.

A requisite for any prioritisation score or index develop should be target, first and foremost, the townships in the upper right quadrant of the plot, which have the heaviest concentrations of conflict events and fatalities. For reference, 58 townships have both above-average numbers of conflict events and fatalities (upper-right quadrant) and 196 townships have both below-average numbers of conflict events and fatalities (bottom-left quadrant).




1.1 Updating the MIMU-HARP Conflict Index

To aid in prioritisation, a conflict score was calculated, making use of available conflict data. At its most basic level, the conflict score is the average of the normalised counts of battles, explosions and remote violence, violence against civilians, strategic developments, non-peaceful protests and riots and conflict-related fatalities. For more details, please see the FSC’s notes on updating the MIMU-HARP Conflict Index. This score will be now be used as a shorthand for conflict incidence in Myanmar.

It is additionally recognised that different types of townships necessitate different programming options. The types of interventions suited to urban centres might not be relevant to rural areas. As part of this initial prioritisation tool, townships have been split into four simple groups (A1, A2, B1 and B2), based on their conflict score and population density.

This grouping separates all 330 townships along two criteria – high or low conflict score (A or B) and high or low population density (1 or 2). Groups A1 and A2 have above average conflict scores. These 107 townships should be prioritised for humanitarian interventions. Recalling the scatterplot above, the colours have now been updated to reflect the prioritisation group. From the plot below that whilst group A1 have populations that are easier to access (having higher population density), the incidence of conflict is higher overall in group A2, with the numbers of conflict-related fatalities being much higher. This quick-and-dirty prioritisation has managed to exclude all the townships in bottom-left quadrant (least conflict-affected) from groups A1 and A2.



Groups A1 and A2 can be distinguished by their population density, with the average population density in group A1 being more than 100 times higher than in group A2. The average PIN per township is slightly higher in group A1 than in group A2. The scatterplot below shows townships by the number of people in need (x-axis) and the population density (y-axis), with the colours reflecting which group each belongs to:



The table below provides some summary statistics for each of the four groups. Included are the PIN and population targeted within the townships in each group, the average conflict score (higher conflict scores indicate a higher incidence of conflict), the average population density and the number of townships within each group:


Summary statistics by township group
group PIN target conflict_score ppl_per_km2 townships
A1 44,000 0 0.138 2,083 1
A2 1,107,219 184,964 0.190 102 17
B2 1,249,724 72,457 0.021 67 37
Note: Groups A1 and A2 have above average conflict scores; groups A1 and B1 have the above average population densities. Townships in groups A1 and A2 should be prioritised over the others.



1.2 Maps of conflict scores and prioritisation group



1.3 Reference table for conflict variables

Below is an interactive reference table for the various types of conflict events by township. It also includes the overall conflict score and prioritisation groups. The search bar can be used to find specific townships, or any of the columns may be sorted according to ascending or descending values. The table currently shows townships in descending order of conflict score.





2. Distribution of flood risk in Myanmar

2.1 Historical flood data

In light of the impending monsoon season, the probability that a township will be affected by a major flood or cylconic event has been calculated. Major floods since 2008 have been factored into this calculation.

For the moment, conflict incidence and flood and cyclone risk will be evaluated separately. Flood and storm surge risk exist as probabilities for the moment; this might change were severe flooding to occur in 2022.



Based on this data, a score was calculated for each township based on how many times it had been affected by floods since 2008. The table below also summarises the number of people in need (2022). 2,210,725 people live in townships that have flooded more than 5 times since 2008.

Summary statistics by number of floods (2008-2021)
flood_count townships people_in_need
9 1 55,490
8 4 333,874
7 7 292,124
6 15 565,632
5 23 963,605
4 33 1,769,108
3 54 2,735,536
2 70 2,994,977
1 73 2,213,089
0 50 1,299,033



2.2 Map of flood risk

The map below shows the probability of each township being affected by floods. The areas with the greatest risk of flooding are in Mon, near the mouth of the Sittaung River and the Gulf of Mottama and those along the Ayeyarwady River, and to a lesser extent, along the Chindwin River.




2.3 Reference table for flood risk

Below is an interactive reference table for flood risk by township. It includes the number of times since 2008 a township has been affected by flooding (flood_count) and the probability of flooding (flood_risk). Similar to the interactive table in the previous chapter, the search bar can be used to find specific townships and any of the columns may be sorted according to ascending or descending values. The table currently shows townships sorted in descending order of flood risk.


LS0tDQp0aXRsZTogIk5vdGVzIG9uIFByZWxpbWluYXJ5IFRvd25zaGlwIFByaW9yaXRpc2F0aW9uIg0KYXV0aG9yOiAiTXlhbm1hciBGb29kIFNlY3VyaXR5IENsdXN0ZXIiDQpkYXRlOiAiMjUvMDMvMjAyMiINCm91dHB1dDogDQogIGh0bWxfZG9jdW1lbnQ6DQogICAgY29kZV9kb3dubG9hZDogdHJ1ZQ0KICAgIHRoZW1lOiByZWFkYWJsZQ0KICAgIHRvYzogdHJ1ZQ0KICAgIHRvY19kZXB0aDogNA0KICAgIHRvY19mbG9hdDogdHJ1ZQ0KICAgIG51bWJlcl9zZWN0aW9uczogZmFsc2UNCiAgICBjb2xsYXBzZWQ6IGZhbHNlDQphbHdheXNfYWxsb3dfaHRtbDogdHJ1ZSAgIA0KLS0tDQoNCmBgYHtjc3MsIGVjaG89RkFMU0V9DQoNCiNUT0M6OmJlZm9yZSB7DQogIGNvbnRlbnQ6ICIiOw0KICBkaXNwbGF5OiBibG9jazsNCiAgaGVpZ2h0OiA3MHB4Ow0KICBtYXJnaW46IDJlbSAyMHB4IDQwcHggMjBweDsNCiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKCJNeWFubWFyX2NsdXN0ZXJfYmx1ZS5wbmciKTsNCiAgYmFja2dyb3VuZC1zaXplOiBjb250YWluOw0KICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiBjZW50ZXIgY2VudGVyOw0KICBiYWNrZ3JvdW5kLXJlcGVhdDogbm8tcmVwZWF0Ow0KfQ0KYGBgDQoNCmBgYHs9aHRtbH0NCjxzdHlsZT4NCiAgICBib2R5IC5tYWluLWNvbnRhaW5lciB7DQogICAgICAgIG1heC13aWR0aDogMTI4MHB4Ow0KICAgIH0NCjwvc3R5bGU+DQpgYGANCg0KYGBge3Igc2V0dXAsIGluY2x1ZGU9RkFMU0V9DQprbml0cjo6b3B0c19jaHVuayRzZXQoZWNobyA9IEZBTFNFLCBmaWcud2lkdGg9OSwgbWVzc2FnZSA9IEZBTFNFLCB3YXJuaW5nPUZBTFNFKQ0KbGlicmFyeSh0aWR5dmVyc2UpDQpsaWJyYXJ5KHJlYWR4bCkNCmxpYnJhcnkobHVicmlkYXRlKQ0KbGlicmFyeShzdHJpbmdpKQ0KbGlicmFyeShwYW5kZXIpDQpsaWJyYXJ5KGphbml0b3IpDQpsaWJyYXJ5KHNjYWxlcykNCmxpYnJhcnkobWFncml0dHIpDQpsaWJyYXJ5KHNmKQ0KbGlicmFyeShzMikNCmxpYnJhcnkoYm9va2Rvd24pDQpsaWJyYXJ5KHBhdGNod29yaykNCmxpYnJhcnkoa2FibGVFeHRyYSkNCmxpYnJhcnkoRFQpDQpsaWJyYXJ5KHZpcmlkaXMpDQpsaWJyYXJ5KG1kZXByaXYpDQoNCmxpYnJhcnkoaGlnaGNoYXJ0ZXIpDQpsaWJyYXJ5KHBsb3RseSkNCg0KbGlicmFyeShSQ29sb3JCcmV3ZXIpDQoNCnRoZW1lX3NldCh0aGVtZV9taW5pbWFsKCkpDQoNCiMgZGlzYWJsaW5nIHNjaWVudGlmaWMgbm90YXRpb24NCm9wdGlvbnMoc2NpcGVuID0gOTk5KQ0KDQojIHBhbmRlciB0YWJsZXMgYWxsIGluIG9uZSByb3cNCnBhbmRlck9wdGlvbnMoJ3RhYmxlLnNwbGl0LnRhYmxlJywgSW5mKQ0KDQojIHBhbmRlciB0aG91c2FuZHMgc2VwYXJhdG9yDQpwYW5kZXJPcHRpb25zKCJiaWcubWFyayIsICIsIikNCg0KIyByZXBsYWNlIA0Kb3B0cyA8LSBvcHRpb25zKGtuaXRyLmthYmxlLk5BID0gIiIpDQoNCmAlb3V0JWAgPC0gTmVnYXRlKGAlaW4lYCkNCg0KIyBmdW5jdGlvbiBiZW5lZmljaWFyeSBzdW1tYXJpZXMNCnN1bV9iZW4gPC0gZnVuY3Rpb24oZGYsIGNvbHVtbl92YXIpew0KICANCiAgY29sdW1uX3ZhciA8LSBlbnF1byhjb2x1bW5fdmFyKQ0KICANCiAgZGYgJT4lDQogICAgZ3JvdXBfYnkoISFjb2x1bW5fdmFyKSAlPiUgIyBtdXN0IGFkZCBiYW5nLWJhbmcNCiAgICBzdW1tYXJpc2UoYmVuZWZpY2lhcmllcyA9IHN1bShiZW5lZmljaWFyaWVzKSkgJT4lIA0KICAgIGFycmFuZ2UoZGVzYyhiZW5lZmljaWFyaWVzKSkNCiAgICANCn0NCg0KIyBmdW5jdGlvbiBiZW5lZmljaWFyeSBzdW1tYXJpZXMsIDIgZ3JvdXBlZCB2YXJpYWJsZXMNCnN1bV9iZW4yIDwtIGZ1bmN0aW9uKGRmLCBjb2x1bW5fdmFyMSwgY29sdW1uX3ZhcjIpew0KICANCiAgY29sdW1uX3ZhcjEgPC0gZW5xdW8oY29sdW1uX3ZhcjEpDQogIGNvbHVtbl92YXIyIDwtIGVucXVvKGNvbHVtbl92YXIyKQ0KICANCiAgZGYgJT4lDQogICAgZ3JvdXBfYnkoISFjb2x1bW5fdmFyMSwgISFjb2x1bW5fdmFyMikgJT4lICMgbXVzdCBhZGQgYmFuZy1iYW5nDQogICAgc3VtbWFyaXNlKGJlbmVmaWNpYXJpZXMgPSBzdW0oYmVuZWZpY2lhcmllcykpICU+JSANCiAgICBhcnJhbmdlKGRlc2MoYmVuZWZpY2lhcmllcykpDQogICAgDQp9DQoNCiMgcmVhZGluZyBpbiBQSU4NCnBpbiA8LSByZWFkX2V4Y2VsKCJocGNfcGluLnhsc3giKQ0KDQojIHJlYWRpbmcgaW4gdG93bnNoaXBzIGZyb20gZ2VvYWRtaW5zIA0KdG93bnNoaXBzIDwtIHJlYWRfZXhjZWwoIkM6L1VzZXJzL3NlYW55L0Rvd25sb2Fkcy9SL21tcl81d19pbml0aWFsX29ic2VydmF0aW9ucy9GU0MgNVcgMjAyMSAtIEdFT0FETUlOU19maW5hbCAxOS54bHN4IiwNCiAgICAgICAgICAgc2hlZXQgPSAiR0VPQURNSU5TIikgJT4lIA0KICBjbGVhbl9uYW1lcygpICU+JSANCiAgc2VsZWN0KGFkbWluMXBjb2RlXzQ6YWRtaW4zcGNvZGUpICU+JSANCiAgcmVuYW1lKGFkbWluMV9wY29kZSA9IGFkbWluMXBjb2RlXzQsDQogICAgICAgICBhZG1pbjNfcGNvZGUgPSBhZG1pbjNwY29kZSwNCiAgICAgICAgIHN0YXRlX25hbWUgICA9IHN0YXRlXzUsDQogICAgICAgICB0b3duc2hpcF9uYW1lICA9IGNvdW50eSkgJT4lIA0KICByZW1vdmVfZW1wdHkoKSAlPiUgDQogIG11dGF0ZShhZG1pbjNfcGNvZGUgPSBpZmVsc2Uoc3RhdGVfbmFtZSA9PSAiTWFnd2F5IiAmIHRvd25zaGlwX25hbWUgPT0gIk1pbmhsYSIsICJNTVIwMDkwMTMiLCBhZG1pbjNfcGNvZGUpLA0KICAgICAgICAgYWRtaW4zX3Bjb2RlID0gaWZlbHNlKHN0YXRlX25hbWUgPT0gIllhbmdvbiIgJiB0b3duc2hpcF9uYW1lID09ICJIdGFudGFiaW4iLCAiTU1SMDEzMDA2IiwgYWRtaW4zX3Bjb2RlKSkNCg0KIyBzaGFwZWZpbGVzDQpwY29kZTNfc2hhcGUgPC0gc3RfcmVhZCgiQzovVXNlcnMvc2VhbnkvRG93bmxvYWRzL1IvYWNsZWQvbW1yX3BvbGJuZGFfYWRtM19taW11XzI1MGsvbW1yX3BvbGJuZGFfYWRtM19taW11XzI1MGsuc2hwIiwgcXVpZXQgPSBUUlVFKSAlPiUgDQogcmVuYW1lKHN0YXRlID0gU1QsIA0KICAgICAgICBhZG1pbjFfcGNvZGUgPSBTVF9QQ09ERSwNCiAgICAgICAgdG93bnNoaXAgPSBUUywNCiAgICAgICAgYWRtaW4zX3Bjb2RlID0gVFNfUENPREUpICU+JSANCiBtdXRhdGUoYWRtaW4zX3Bjb2RlID0gaWZlbHNlKHN0cl9kZXRlY3QodG93bnNoaXAsICJIbGFpbmd0aGFyeWEiKSwgIk1NUjAxMzAwOCIsIGFkbWluM19wY29kZSkpDQoNCnBjb2RlMV9zaGFwZSA8LSBzdF9yZWFkKCJDOi9Vc2Vycy9zZWFueS9Eb3dubG9hZHMvUi9hY2xlZC9tbXJfcG9sYm5kYTJfYWRtMV9taW11XzI1MGsvbW1yX3BvbGJuZGEyX2FkbTFfbWltdV8yNTBrLnNocCIsIHF1aWV0ID0gVFJVRSkgJT4lIA0KIHJlbmFtZShzdGF0ZSA9IFNULCANCiAgICAgICAgYWRtaW4xX3Bjb2RlID0gU1RfUENPREUpICU+JSBzdF9hc19zZigpDQoNCiMgcmVhZGluZyBpbiA1V3MNCmZzYyA8LSByZWFkX2NzdigiQzovVXNlcnMvc2VhbnkvRG93bmxvYWRzL1IvYWNsZWQvZnNjNXdfMjAyMS5jc3YiKQ0KDQojIHJlYWRpbmcgaW4gdnVsbmVyYWJpbGl0eSBkYXRhc2V0DQp2dWxtbXIgPC0gcmVhZF9leGNlbCgiQzovVXNlcnMvc2VhbnkvRG93bmxvYWRzL1IvbW1yXzV3X2luaXRpYWxfb2JzZXJ2YXRpb25zL0RhdGFzZXRzX1Z1bG5lcmFiaWxpdHlfQW5hbHlzaXNfaW5fTXlhbm1hcl8wOUp1bDIwMTggKDEpLnhsc3giLA0KICAgICAgICAgICBza2lwID0gMSkgJT4lIA0KICBzbGljZSgtYygxOjMpKSAlPiUgDQogIGNsZWFuX25hbWVzKCkgJT4lIA0KICBzZWxlY3QoLWxhYmVsKSAlPiUgDQogIG11dGF0ZV9hdCh2YXJzKG51bWJlcl9vZl92aWxsYWdlX3RyYWN0czp3Yl93ZWFsdGhfcmFuayksIGFzLm51bWVyaWMpICU+JSANCiAgbXV0YXRlX2F0KHZhcnMoZGlzYXN0ZXJzX2ltcGFjdGVkX2J5X25hcmdpc18yMDA4OmFjbGVkXzIwMTVfMjAxNl9kYXRhX2V4aXN0cyksIGFzLmxvZ2ljYWwpICU+JSANCiAgbXV0YXRlX2F0KHZhcnMoY29uZmxpY3RfMjAxNV8yMDE2X251bWJlcl9vZl9iYXR0bGVzOmNvcnJlY3RlZF9jb25mbGljdF9pbmRleF9nYXJyeSksIGFzLm51bWVyaWMpICU+JSANCiAgc2VsZWN0KC1zdGFydHNfd2l0aCgieCIpKSAlPiUgDQogIHNlbGVjdCgtYyhwcml2YXRlX3NlY3Rvcl9kZXZlbG9wbWVudF8yMDE0XzIwMTUsIHByb3RlY3Rpb25fMjAxMF8yMDE1LCBzaGVsdGVyXzIwMTBfMjAxNSwgd2FzaF8yMDEwXzIwMTUpKQ0KDQojIHJlYWRpbmcgaW4gY29uZmxpY3Qgc2NvcmUNCmNvbmZsaWN0X3Njb3JlIDwtIHJlYWRfY3N2KCJjb25mbGljdF9zY29yZS5jc3YiKQ0KDQojIHNob3dfY29sKHZpcmlkaXNfcGFsKCkoMTApKQ0KDQpmbG9vZHNfc3Rvcm1fc3VyZ2UgPC0gcmVhZF9leGNlbCgiRmxvb2RfQWZmZWN0ZWRfVG93bnNoaXBfKDIwMDgtMjAyMSkgKDEpLnhsc3giKSAlPiUgDQogIGNsZWFuX25hbWVzKCkgJT4lIA0KICByZW5hbWUoc3RhdGUgPSBzdCwgdG93bnNoaXAgPSB0cywgYWRtaW4xX3Bjb2RlID0gc3RfcGNvZGUsIGFkbWluM19wY29kZSA9IHRzX3Bjb2RlKSAlPiUgDQogIG11dGF0ZSh5ZWFyXzIwMDhfc3Rvcm1fc3VyZ2UgPSBpZmVsc2UoIWlzLm5hKHN0b3JtX3N1cmcpLCAxLCAwKSkgJT4lDQogIG11dGF0ZSh5ZWFyXzIwMDggPSBpZmVsc2Uoc3RyX2RldGVjdChmbG9vZF95ZWFyLCAiMjAwOCIpLCAxLCAwKSwNCiAgICAgICAgIHllYXJfMjAwOSA9IGlmZWxzZShzdHJfZGV0ZWN0KGZsb29kX3llYXIsICIyMDA5IiksIDEsIDApLA0KICAgICAgICAgeWVhcl8yMDEwID0gaWZlbHNlKHN0cl9kZXRlY3QoZmxvb2RfeWVhciwgIjIwMTAiKSwgMSwgMCksDQogICAgICAgICB5ZWFyXzIwMTEgPSBpZmVsc2Uoc3RyX2RldGVjdChmbG9vZF95ZWFyLCAiMjAxMSIpLCAxLCAwKSwNCiAgICAgICAgIHllYXJfMjAxMiA9IGlmZWxzZShzdHJfZGV0ZWN0KGZsb29kX3llYXIsICIyMDEyIiksIDEsIDApLA0KICAgICAgICAgeWVhcl8yMDEzID0gaWZlbHNlKHN0cl9kZXRlY3QoZmxvb2RfeWVhciwgIjIwMTMiKSwgMSwgMCksDQogICAgICAgICB5ZWFyXzIwMTQgPSBpZmVsc2Uoc3RyX2RldGVjdChmbG9vZF95ZWFyLCAiMjAxNCIpLCAxLCAwKSwNCiAgICAgICAgIHllYXJfMjAxNSA9IGlmZWxzZShzdHJfZGV0ZWN0KGZsb29kX3llYXIsICIyMDE1IiksIDEsIDApLA0KICAgICAgICAgeWVhcl8yMDE2ID0gaWZlbHNlKHN0cl9kZXRlY3QoZmxvb2RfeWVhciwgIjIwMTYiKSwgMSwgMCksDQogICAgICAgICB5ZWFyXzIwMTcgPSBpZmVsc2Uoc3RyX2RldGVjdChmbG9vZF95ZWFyLCAiMjAxNyIpLCAxLCAwKSwNCiAgICAgICAgIHllYXJfMjAxOCA9IGlmZWxzZShzdHJfZGV0ZWN0KGZsb29kX3llYXIsICIyMDE4IiksIDEsIDApLA0KICAgICAgICAgeWVhcl8yMDE5ID0gaWZlbHNlKHN0cl9kZXRlY3QoZmxvb2RfeWVhciwgIjIwMTkiKSwgMSwgMCksDQogICAgICAgICB5ZWFyXzIwMjAgPSBpZmVsc2Uoc3RyX2RldGVjdChmbG9vZF95ZWFyLCAiMjAyMCIpLCAxLCAwKSwNCiAgICAgICAgIHllYXJfMjAyMSA9IGlmZWxzZShzdHJfZGV0ZWN0KGZsb29kX3llYXIsICIyMDIxIiksIDEsIDApKSAlPiUNCiAgcmVuYW1lKGZsb29keWVhcnMgPSBmbG9vZF95ZWFyKSAlPiUgDQogIG11dGF0ZSgNCiAgICBmbG9vZF9wcm9iID0gc2VsZWN0KC4sIHN0YXJ0c193aXRoKCJ5ZWFyXyIpKSAlPiUgcm93TWVhbnMobmEucm0gPSBUUlVFKSwNCiAgICBmbG9vZF9jb3VudCA9IHNlbGVjdCguLCBzdGFydHNfd2l0aCgieWVhcl8iKSkgJT4lIHJvd1N1bXMobmEucm0gPSBUUlVFKSkNCg0KIyBtYWluIGRhdGFzZXQgZm9yIHRoaXMgbm90ZQ0KZnNfcGluIDwtIHBpbiAlPiUgDQogIGxlZnRfam9pbihjb25mbGljdF9zY29yZSAlPiUgc2VsZWN0KGFkbWluM19wY29kZSwgYmF0dGxlcywgZXhwbG9zaW9uc19yZW1vdGVfdmlvbGVuY2UsIHByb3Rlc3RzX2FuZF9yaW90cywgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmF0ZWdpY19kZXZlbG9wbWVudHMsIHZpb2xlbmNlX2FnYWluc3RfY2l2aWxpYW5zLCBjb25mbGljdF9zY29yZSA9IHNjb3JlX2ksIGZhdGFsaXRpZXMpLA0KICAgICAgICAgICAgYnkgPSAiYWRtaW4zX3Bjb2RlIikgJT4lIA0KICBsZWZ0X2pvaW4odnVsbW1yICU+JSBzZWxlY3QoYWRtaW4zX3Bjb2RlID0gdG93bnNoaXBfcGNvZGUsIA0KICAgICAgICAgICAgICAgICAgICAgYXJlYV9zb3duX2FjcmVzID0gYWxsX2FyZWFfc293ZWRfbWFsaSwgcG9wdWxhdGlvbl9kZW5zaXR5KSwNCiAgICAgICAgICAgIGJ5ID0gImFkbWluM19wY29kZSIpICU+JSANCiAgbGVmdF9qb2luKGZsb29kc19zdG9ybV9zdXJnZSAlPiUgDQogICAgICAgICAgICAgIHNlbGVjdChhZG1pbjNfcGNvZGUsIGZsb29kX3Byb2IsIGZsb29kX2NvdW50KSwNCiAgICAgICAgICAgIGJ5ID0gImFkbWluM19wY29kZSIpICU+JSANCiAgbGVmdF9qb2luKGZzYyAlPiUNCiAgICAgICAgICAgICAgZmlsdGVyKHVuaXF1ZV9iZW5lZmljaWFyaWVzID09ICJZZXMiKSAlPiUNCiAgICAgICAgICAgICAgZ3JvdXBfYnkoYWRtaW4zX3Bjb2RlKSAlPiUNCiAgICAgICAgICAgICAgc3VtbWFyaXNlKGJlbmVmaWNpYXJpZXNfMjAyMSA9IHN1bShiZW5lZmljaWFyaWVzKSwNCiAgICAgICAgICAgICAgICAgICAgICAgIHBhcnRuZXJzXzIwMjEgPSBuX2Rpc3RpbmN0KGltcGxlbWVudGluZ19wYXJ0bmVycykpLA0KICAgICAgICAgICAgYnkgPSAiYWRtaW4zX3Bjb2RlIikgJT4lIA0KICBsZWZ0X2pvaW4oZnNjICU+JSBmaWx0ZXIoZGF0ZSA+ICIyMDIxLTA5LTAxIikgJT4lDQogICAgICAgICAgICAgIGdyb3VwX2J5KGFkbWluM19wY29kZSkgJT4lDQogICAgICAgICAgICAgIHN1bW1hcmlzZShiZW5fNl9tb250aHMgPSBzdW0oYmVuZWZpY2lhcmllcykpLA0KICAgICAgICAgICAgYnkgPSAiYWRtaW4zX3Bjb2RlIikgJT4lIA0KICBtdXRhdGUobm90X2luXzZtb250aHMgPSBpZmVsc2UoaXMubmEoYmVuXzZfbW9udGhzKSwgMSwgMCkpICU+JSANCiAgbXV0YXRlKGZzX3BpbiA9IGlmZWxzZShmc19waW4gPiBwb3B1bGF0aW9uXzIwMjFfcHJvaiwgcG9wdWxhdGlvbl8yMDIxX3Byb2osIGZzX3BpbikpICU+JSANCiAgcmVwbGFjZV9uYShsaXN0KGNvbmZsaWN0X3Njb3JlID0gMCwgYmVuZWZpY2lhcmllc18yMDIxID0gMCwgcGFydG5lcnNfMjAyMSA9IDAsIGZsb29kX3Byb2IgPSAwKSkgJT4lIA0KICBtdXRhdGUoY29uZmxpY3RfcmFua2luZyA9IGRlbnNlX3JhbmsoZGVzYyhjb25mbGljdF9zY29yZSkpLA0KICAgICAgICAgZmxvb2RfcmFua2luZyA9IGRlbnNlX3JhbmsoZGVzYyhmbG9vZF9wcm9iKSksDQogICAgICAgICBmc19waW5fcmFua2luZyA9IGRlbnNlX3JhbmsoZGVzYyhmc19waW4pKSwNCiAgICAgICAgIGZzX3RhcmdldF9yYW5raW5nID0gZGVuc2VfcmFuayhkZXNjKGZzX3RhcmdldGVkKSksDQogICAgICAgICBmc19waW5fcGMgPSBmc19waW4gLyBzdW0oZnNfcGluKSwNCiAgICAgICAgIHBpbl9wb3AgPSBmc19waW4gLyBwb3B1bGF0aW9uXzIwMjFfcHJvaikgJT4lIA0KICBtdXRhdGUoZ3JvdXAgPSBjYXNlX3doZW4oY29uZmxpY3Rfc2NvcmUgPj0gbWVhbihjb25mbGljdF9zY29yZSkgJiBwb3B1bGF0aW9uX2RlbnNpdHkgPj0gNTAwIH4gIkExIiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZsaWN0X3Njb3JlID49IG1lYW4oY29uZmxpY3Rfc2NvcmUpICYgcG9wdWxhdGlvbl9kZW5zaXR5IDwgNTAwIH4gIkEyIiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZsaWN0X3Njb3JlIDwgbWVhbihjb25mbGljdF9zY29yZSkgJiBwb3B1bGF0aW9uX2RlbnNpdHkgPj0gNTAwIH4gIkIxIiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZsaWN0X3Njb3JlIDwgbWVhbihjb25mbGljdF9zY29yZSkgJiBwb3B1bGF0aW9uX2RlbnNpdHkgPCA1MDAgfiAiQjIiKSkgDQoNCiMgc2hvd19jb2wodmlyaWRpc19wYWwob3B0aW9uID0gImNpdmlkaXMiKSgxMCkpDQpgYGANCg0KDQoNCiMjIEludHJvZHVjdGlvbiANCg0KQXMgbm90ZWQgYnkgdGhlIEZTQydzIGFuYWx5c2lzIG9mIEFDTEVEICBjb25mbGljdCBkYXRhLCB0aGVyZSB3YXMgbm8gZGlzY2VybmlibGUgcmVsYXRpb25zaGlwIGJldHdlZW4gZm9vZCBzZWN1cml0eSBwYXJ0bmVycycgcHJlc2VuY2UgYW5kIHRoZSBpbmNpZGVuY2Ugb2YgY29uZmxpY3QgaW4gMjAyMS4gVGhpcyBkb2N1bWVudCBpbnRlbmRzIHRvIGluZm9ybSBzdHJhdGVnaWMgYW5kIG9wZXJhdGlvbmFsIGRlY2lzaW9uIG1ha2luZyBhbmQgcHJvdmlkZXMgZXZpZGVuY2UgaW50ZW5kZWQgdG8gZ3VpZGUgZ2VvZ3JhcGhpYyBwcmlvcml0aXNhdGlvbiBhdCB0aGUgdG93bnNoaXAgbGV2ZWwuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBwbGVhc2Ugc2VlIHRoZSAqKltGU0MncyBDb25mbGljdCBBbmFseXNpc10oaHR0cHM6Ly9mb29kLXNlY3VyaXR5LWNsdXN0ZXItbXlhbm1hci5naXRodWIuaW8vZXhwbG9yYXRvcnktZGF0YS1hbmFseXNpcy1hY2xlZC1mc2MvKSoqLg0KDQo8YnI+PGJyPjxicj4NCg0KIyMgMS4gRGlzdHJpYnV0aW9uIG9mIGNvbmZsaWN0IGV2ZW50cyBpbiBNeWFubWFyDQoNCmBgYHtyIGNvbmZpY3Qtc3RhdGUtYmFycGxvdH0NCmNvbmZsaWN0X3Njb3JlICU+JSANCiAgc2VsZWN0KGFkbWluM19wY29kZSwgYmF0dGxlcywgZXhwbG9zaW9uc19yZW1vdGVfdmlvbGVuY2UsIHByb3Rlc3RzX2FuZF9yaW90cywgDQogICAgICAgICBzdHJhdGVnaWNfZGV2ZWxvcG1lbnRzLCB2aW9sZW5jZV9hZ2FpbnN0X2NpdmlsaWFucykgJT4lIA0KICBwaXZvdF9sb25nZXIoY29scyA9IGMoYmF0dGxlczp2aW9sZW5jZV9hZ2FpbnN0X2NpdmlsaWFucyksIG5hbWVzX3RvID0gImV2ZW50X3R5cGUiLCB2YWx1ZXNfdG8gPSAidmFsdWUiKSAlPiUgDQogIGxlZnRfam9pbihmc19waW4gJT4lIHNlbGVjdChhZG1pbjNfcGNvZGUsIHN0YXRlKSwgYnkgPSAiYWRtaW4zX3Bjb2RlIikgJT4lIA0KICBncm91cF9ieShzdGF0ZSkgJT4lIA0KICBtdXRhdGUodG90YWxfZXZlbnRzID0gc3VtKHZhbHVlKSkgJT4lIA0KICB1bmdyb3VwKCkgJT4lIA0KICBtdXRhdGUoc3RhdGUgPSBmY3RfcmVvcmRlcihzdGF0ZSwgLXRvdGFsX2V2ZW50cykpICU+JSANCiAgdW5ncm91cCgpICU+JSANCiAgZ2dwbG90KGFlcyh4ID0gc3RhdGUsIHkgPSB2YWx1ZSwgZmlsbCA9IGV2ZW50X3R5cGUpKSArIA0KICBnZW9tX2NvbCgpICsNCiAgc2NhbGVfeV9jb250aW51b3VzKGxhYmVscyA9IGNvbW1hKSArDQogIHRoZW1lKGF4aXMudGV4dC54ID0gZWxlbWVudF90ZXh0KGFuZ2xlID0gMzAsIHZqdXN0ID0gMC43LCBoanVzdCA9IDAuNykpICsNCiAgbGFicyh4ID0gIiIsIA0KICAgICAgIHkgPSAiQ29uZmxpY3QgZXZlbnRzIiwNCiAgICAgICB0aXRsZSA9ICIyMDIxIGNvbmZsaWN0IGV2ZW50cyBieSBzdGF0ZSIpDQoNCiNnZ3NhdmUoImV2ZW50X3R5cGVfc3RhdGUucG5nIiwgZHBpID0gMzAwLCBoZWlnaHQgPSA1LCB3aWR0aCA9IDgsIHVuaXRzID0gImluIikNCmBgYA0KDQo8YnI+DQoNClNhZ2Fpbmcgc2F3IHRoZSBoaWdoZXN0IG51bWJlciBvZiBjb25mbGljdCBldmVudHMgYXMgd2VsbCBhcyBjb25mbGljdCBhcyB3ZWxsIGFzIGNvbmZsaWN0LXJlbGF0ZWQgZmF0YWxpdGllcyBpbiAyMDEyLiBJdCBleHBlcmllbmNlZCBtb3JlIHRoYW4gdGhyZWUgdGltZXMgYXMgbWFueSBjb25mbGljdC1yZWxhdGVkIGZhdGFsaXRpZXMgdGhhbiB0aGUgbmV4dC1oaWdoZXN0IHN0YXRlL3JlZ2lvbiAtLSBNYWd3YXkuIFRoaXMgaXMgYSBzaWduaWZpY2FudCBzaGlmdCBpbiB0aGUgcGF0dGVybiBvZiBjb25mbGljdCBpbiBNeWFubWFyLCB3aGljaCBoYXMgdHJhZGl0aW9uYWxseSByZXZvbHZlZCBhcm91bmQgS2FjaGluLCBSYWtoaW5lIGFuZCBTaGFuLiANCg0KS2F5YWgsIENoaW4gYW5kIFNhZ2FpbmcgaGFkIHRoZSBoaWdoZXN0IG51bWJlciBvZiBjb25mbGljdCBmYXRhbGl0aWVzIHBlciBjYXBpdGEgaW4gMjAyMS4gDQoNCjxicj4NCg0KYGBge3IgY29uZmxpY3QtZmF0YWxpdGllcy1iYXJwbG90fQ0KDQpjb25mbGljdF9zY29yZSAlPiUgDQogIHNlbGVjdChhZG1pbjNfcGNvZGUsIGZhdGFsaXRpZXMpICU+JSANCiAgbGVmdF9qb2luKGZzX3BpbiAlPiUgc2VsZWN0KGFkbWluM19wY29kZSwgc3RhdGUsIHBvcHVsYXRpb25fMjAyMV9wcm9qKSwgYnkgPSAiYWRtaW4zX3Bjb2RlIikgJT4lIA0KICBncm91cF9ieShzdGF0ZSkgJT4lIA0KICBzdW1tYXJpc2UoZmF0YWxpdGllcyA9IHN1bShmYXRhbGl0aWVzKSwgDQogICAgICAgICAgICBwb3AgPSBzdW0ocG9wdWxhdGlvbl8yMDIxX3Byb2opKSAlPiUgDQogIG11dGF0ZShmYXRhbGl0aWVzX3BjID0gZmF0YWxpdGllcyAvIHBvcCkgJT4lIA0KICBtdXRhdGUoc3RhdGUgPSBmY3RfcmVvcmRlcihzdGF0ZSwgLWZhdGFsaXRpZXMpKSAlPiUgDQogIGdncGxvdChhZXMoeCA9IHN0YXRlLCB5ID0gZmF0YWxpdGllcywgZmlsbCA9IGZhdGFsaXRpZXNfcGMpKSArDQogIGdlb21fY29sKCkgKyANCiAgc2NhbGVfZmlsbF92aXJpZGlzKG9wdGlvbiA9ICJtYWdtYSIsIGRpcmVjdGlvbiA9IC0xKSArDQogIHNjYWxlX3lfY29udGludW91cyhsYWJlbHMgPSBjb21tYSkgKw0KICB0aGVtZShheGlzLnRleHQueCA9IGVsZW1lbnRfdGV4dChhbmdsZSA9IDMwLCB2anVzdCA9IDAuNywgaGp1c3QgPSAwLjcpKSArDQogIGxhYnMoeCA9ICIiLA0KICAgICAgIHkgPSAiTnVtYmVyIG9mIGZhdGFsaXRpZXMiLCANCiAgICAgICB0aXRsZSA9ICJDb25mbGljdCBmYXRhbGl0aWVzIGJ5IHN0YXRlIiwNCiAgICAgICBzdWJ0aXRsZSA9ImFuZCBmYXRhbGl0aWVzIHBlciBjYXBpdGEiLCANCiAgICAgICBmaWxsID0gImZhdGFsaXRpZXNcbnBlciBjYXBpdGEiKQ0KDQojIGdnc2F2ZSgiZmF0YWxpdGllc19zdGF0ZS5wbmciLCBkcGkgPSAzMDAsIGhlaWdodCA9IDUsIHdpZHRoID0gOCwgdW5pdHMgPSAiaW4iKQ0KICANCmBgYA0KDQo8YnI+DQoNCkFzIGNhbiBiZSBzZWVtIGZyb20gdGhlIGJhcnBsb3RzIGFib3ZlLCB0aGUgZGlzdHJpYnV0aW9uIG9mIGNvbmZsaWN0IGV2ZW50cyBhbmQgZmF0YWxpdGllcyBpcyBub3QgZXZlbiwgYmVpbmcgc2tld2VkIHRvIGEgZmV3IHN0YXRlcy9yZWdpb25zLiBUaGlzIGlzIGFsc28gZXZpZGVudCBhdCB0b3duc2hpcCBsZXZlbC4gSW4gdGhlIHNjYXR0ZXJwbG90IGJlbG93LCB0aGUgYXZlcmFnZXMgb2YgdGhlIG51bWJlciBvZiBjb25mbGljdCBldmVudHMgYW5kIHRoZSBudW1iZXIgb2YgZmF0YWxpdGllcyBhdCB0aGUgdG93bnNoaXAgbGV2ZWwgaGF2ZSBiZWVuIG1hcmtlZCBieSB0aGUgZG90dGVkIHJlZCBsaW5lcywgZGl2aWRpbmcgdGhlIHBsb3QgaW50byBmb3VyIHF1YWRyYW50cy4gDQoNCkEgcmVxdWlzaXRlIGZvciBhbnkgcHJpb3JpdGlzYXRpb24gc2NvcmUgb3IgaW5kZXggZGV2ZWxvcCBzaG91bGQgYmUgdGFyZ2V0LCBmaXJzdCBhbmQgZm9yZW1vc3QsIHRoZSB0b3duc2hpcHMgaW4gdGhlIHVwcGVyIHJpZ2h0IHF1YWRyYW50IG9mIHRoZSBwbG90LCB3aGljaCBoYXZlIHRoZSBoZWF2aWVzdCBjb25jZW50cmF0aW9ucyBvZiBjb25mbGljdCBldmVudHMgYW5kIGZhdGFsaXRpZXMuIEZvciByZWZlcmVuY2UsIDU4IHRvd25zaGlwcyBoYXZlIGJvdGggYWJvdmUtYXZlcmFnZSBudW1iZXJzIG9mIGNvbmZsaWN0IGV2ZW50cyBhbmQgZmF0YWxpdGllcyAodXBwZXItcmlnaHQgcXVhZHJhbnQpIGFuZCAxOTYgdG93bnNoaXBzIGhhdmUgYm90aCBiZWxvdy1hdmVyYWdlIG51bWJlcnMgb2YgY29uZmxpY3QgZXZlbnRzIGFuZCBmYXRhbGl0aWVzIChib3R0b20tbGVmdCBxdWFkcmFudCkuIA0KDQo8YnI+DQoNCmBgYHtyIGNvbmZsaWN0LXNjYXR0ZXJwbG90fQ0KY29uZmxpY3Rfc2NhdHRlciA8LSBjb25mbGljdF9zY29yZSAlPiUgDQogIG11dGF0ZSh0b3RhbF9ldmVudHMgPSBiYXR0bGVzICsgZXhwbG9zaW9uc19yZW1vdGVfdmlvbGVuY2UgKyBwcm90ZXN0c19hbmRfcmlvdHMgKyBzdHJhdGVnaWNfZGV2ZWxvcG1lbnRzICsNCiAgICAgICAgICAgdmlvbGVuY2VfYWdhaW5zdF9jaXZpbGlhbnMpICU+JSANCiAgbGVmdF9qb2luKGZzX3BpbiAlPiUgc2VsZWN0KHN0YXRlLCB0b3duc2hpcCwgcGFydG5lcnNfMjAyMSwgYWRtaW4zX3Bjb2RlLCBwb3B1bGF0aW9uX2RlbnNpdHkpLCBieSA9ICJhZG1pbjNfcGNvZGUiKSAlPiUNCiAgZmlsdGVyKHN0YXRlICVpbiUgYygiS2F5YWgiLCAiS2F5aW4iLCAiTW9uIiwgIlRhbmludGhhcnlpIiwgIlNoYW4gKFNvdXRoKSIpKSAlPiUgDQogIGdncGxvdChhZXMoeSA9IGZhdGFsaXRpZXMsIHggPSB0b3RhbF9ldmVudHMsIGNvbG91ciA9IHRvdGFsX2V2ZW50cywgDQogICAgICAgICAgICAgdGV4dCA9IHBhc3RlMCh0b3duc2hpcCwgIiwiLCAiXG4iLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUsICIsIiwgIlxuIiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJldmVudHM6ICIsIHRvdGFsX2V2ZW50cywgIiwiLCAiXG4iLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgImZhdGFsaXRpZXM6ICIsIGZhdGFsaXRpZXMsICIsIiwgIlxuIiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJwYXJ0bmVyczogIiwgcGFydG5lcnNfMjAyMSkpKSArDQogIGdlb21fcG9pbnQoYWVzKHNpemUgPSBmYXRhbGl0aWVzKSkgKw0KICBzY2FsZV95X2NvbnRpbnVvdXModHJhbnMgPSAibG9nMTAiLCBicmVha3MgPSBjKDAsIDEsIDEwLCAzMCwgMTAwLCAzMDAsIDEwMDApKSArDQogIHNjYWxlX3hfY29udGludW91cyh0cmFucyA9ICJsb2cxMCIsIGJyZWFrcyA9IGMoMCwgMSwgMTAsIDMwLCAxMDAsIDMwMCkpICsNCiAgc2NhbGVfY29sb3VyX3ZpcmlkaXMob3B0aW9uID0gIm1hZ21hIiwgZGlyZWN0aW9uID0gLTEpICsNCiAgZ2VvbV9obGluZShhZXMoeWludGVyY2VwdCA9IG1lYW4oZmF0YWxpdGllcykpLCBjb2xvdXIgPSAicmVkIiwgbHR5ID0gMikgKw0KICBnZW9tX3ZsaW5lKGFlcyh4aW50ZXJjZXB0ID0gbWVhbih0b3RhbF9ldmVudHMpKSwgY29sb3VyID0gInJlZCIsIGx0eSA9IDIpICsNCiAgbGFicyh4ID0gIkNvbmZsaWN0IGV2ZW50cyIsIA0KICAgICAgIHkgPSAiRmF0YWxpdGllcyIsDQogICAgICAgdGl0bGUgPSAiQ29uZmxpY3QgZXZlbnRzIGFuZCBmYXRhbGl0aWVzIGJ5IHRvd25zaGlwIiwgDQogICAgICAgc3VidGl0bGUgPSAiTWVhbnMgb2YgYm90aCBheGVzIGFyZSBtYXJrZWQgYnkgdGhlIGRvdHRlZCByZWQgbGluZSIsDQogICAgICAgY29sb3VyID0gImNvbmZsaWN0XG5ldmVudHMiLCANCiAgICAgICBzaXplID0gImZhdGFsaXRpZXMiKSANCg0KZ2dwbG90bHkoY29uZmxpY3Rfc2NhdHRlciwgdG9vbHRpcCA9IGMoInRleHQiKSkgJT4lIA0KICAjIGxheW91dChzaG93bGVnZW5kID0gRkFMU0UsIGxlZ2VuZCA9IGxpc3QoZm9udCA9IGxpc3Qoc2l6ZSA9IDYpKSkgJT4lIA0KICBjb25maWcoZGlzcGxheU1vZGVCYXIgPSBGQUxTRSkgJT4lIA0KICBsYXlvdXQodGl0bGUgPSBsaXN0KHRleHQgPSBwYXN0ZTAoIkNvbmZsaWN0IGV2ZW50cyBhbmQgZmF0YWxpdGllcyBieSB0b3duc2hpcCIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiPGJyPiIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiPHN1cD4iLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1vdXNlIG92ZXIgZm9yIGRldGFpbHM7IG1lYW5zIG1hcmtlZCBieSByZWQgbGluZXM7IGZhdGFsaXRpZXMgbWFya2VkIGJ5IHNpemUiLCI8L3N1cD4iKSkpDQoNCiMgZ2dzYXZlKCJ0c3Bfc2NhdHRlcl9jb25mbGljdC5wbmciLCBkcGkgPSAzMDAsIGhlaWdodCA9IDUsIHdpZHRoID0gOCwgdW5pdHMgPSAiaW4iKQ0KDQpgYGANCg0KPGJyPjxicj4NCg0KIyMjIDEuMSBVcGRhdGluZyB0aGUgTUlNVS1IQVJQIENvbmZsaWN0IEluZGV4DQoNClRvIGFpZCBpbiBwcmlvcml0aXNhdGlvbiwgYSBjb25mbGljdCBzY29yZSB3YXMgY2FsY3VsYXRlZCwgbWFraW5nIHVzZSBvZiBhdmFpbGFibGUgY29uZmxpY3QgZGF0YS4gQXQgaXRzIG1vc3QgYmFzaWMgbGV2ZWwsIHRoZSBjb25mbGljdCBzY29yZSBpcyB0aGUgYXZlcmFnZSBvZiB0aGUgbm9ybWFsaXNlZCBjb3VudHMgb2YgYmF0dGxlcywgZXhwbG9zaW9ucyBhbmQgcmVtb3RlIHZpb2xlbmNlLCB2aW9sZW5jZSBhZ2FpbnN0IGNpdmlsaWFucywgc3RyYXRlZ2ljIGRldmVsb3BtZW50cywgbm9uLXBlYWNlZnVsIHByb3Rlc3RzIGFuZCByaW90cyBhbmQgY29uZmxpY3QtcmVsYXRlZCBmYXRhbGl0aWVzLiBGb3IgbW9yZSBkZXRhaWxzLCBwbGVhc2Ugc2VlIHRoZSAgKipbRlNDJ3Mgbm90ZXMgb24gdXBkYXRpbmcgdGhlIE1JTVUtSEFSUCBDb25mbGljdCBJbmRleF0oaHR0cHM6Ly9mb29kLXNlY3VyaXR5LWNsdXN0ZXItbXlhbm1hci5naXRodWIuaW8vZXhwbG9yYXRvcnktZGF0YS1hbmFseXNpcy1hY2xlZC1mc2MvI3JldmlzaXRpbmctdGhlLW1pbXUtaGFycC1jb25mbGljdC1pbmRleCkqKi4gVGhpcyBzY29yZSB3aWxsIGJlIG5vdyBiZSB1c2VkIGFzIGEgc2hvcnRoYW5kIGZvciBjb25mbGljdCBpbmNpZGVuY2UgaW4gTXlhbm1hci4gDQoNCkl0IGlzIGFkZGl0aW9uYWxseSByZWNvZ25pc2VkIHRoYXQgZGlmZmVyZW50IHR5cGVzIG9mIHRvd25zaGlwcyBuZWNlc3NpdGF0ZSBkaWZmZXJlbnQgcHJvZ3JhbW1pbmcgb3B0aW9ucy4gVGhlIHR5cGVzIG9mIGludGVydmVudGlvbnMgc3VpdGVkIHRvIHVyYmFuIGNlbnRyZXMgbWlnaHQgbm90IGJlIHJlbGV2YW50IHRvIHJ1cmFsIGFyZWFzLiBBcyBwYXJ0IG9mIHRoaXMgaW5pdGlhbCBwcmlvcml0aXNhdGlvbiB0b29sLCB0b3duc2hpcHMgaGF2ZSBiZWVuIHNwbGl0IGludG8gZm91ciBzaW1wbGUgZ3JvdXBzIChBMSwgQTIsIEIxIGFuZCBCMiksIGJhc2VkIG9uIHRoZWlyIGNvbmZsaWN0IHNjb3JlIGFuZCBwb3B1bGF0aW9uIGRlbnNpdHkuDQoNClRoaXMgZ3JvdXBpbmcgc2VwYXJhdGVzIGFsbCAzMzAgdG93bnNoaXBzIGFsb25nIHR3byBjcml0ZXJpYSAtLSBoaWdoIG9yIGxvdyBjb25mbGljdCBzY29yZSAoQSBvciBCKSBhbmQgaGlnaCBvciBsb3cgcG9wdWxhdGlvbiBkZW5zaXR5ICgxIG9yIDIpLiBHcm91cHMgQTEgYW5kIEEyIGhhdmUgYWJvdmUgYXZlcmFnZSBjb25mbGljdCBzY29yZXMuIFRoZXNlIDEwNyB0b3duc2hpcHMgc2hvdWxkIGJlIHByaW9yaXRpc2VkIGZvciBodW1hbml0YXJpYW4gaW50ZXJ2ZW50aW9ucy4gUmVjYWxsaW5nIHRoZSBzY2F0dGVycGxvdCBhYm92ZSwgdGhlIGNvbG91cnMgaGF2ZSBub3cgYmVlbiB1cGRhdGVkIHRvIHJlZmxlY3QgdGhlIHByaW9yaXRpc2F0aW9uIGdyb3VwLiBGcm9tIHRoZSBwbG90IGJlbG93IHRoYXQgd2hpbHN0IGdyb3VwIEExIGhhdmUgcG9wdWxhdGlvbnMgdGhhdCBhcmUgZWFzaWVyIHRvIGFjY2VzcyAoaGF2aW5nIGhpZ2hlciBwb3B1bGF0aW9uIGRlbnNpdHkpLCB0aGUgaW5jaWRlbmNlIG9mIGNvbmZsaWN0IGlzIGhpZ2hlciBvdmVyYWxsIGluIGdyb3VwIEEyLCB3aXRoIHRoZSBudW1iZXJzIG9mIGNvbmZsaWN0LXJlbGF0ZWQgZmF0YWxpdGllcyBiZWluZyBtdWNoIGhpZ2hlci4gVGhpcyBxdWljay1hbmQtZGlydHkgcHJpb3JpdGlzYXRpb24gaGFzIG1hbmFnZWQgdG8gZXhjbHVkZSBhbGwgdGhlIHRvd25zaGlwcyBpbiBib3R0b20tbGVmdCBxdWFkcmFudCAobGVhc3QgY29uZmxpY3QtYWZmZWN0ZWQpIGZyb20gZ3JvdXBzIEExIGFuZCBBMi4gDQoNCjxicj4NCg0KDQpgYGB7ciBzY2F0dGVycGxvdC1ncm91cHN9DQpzY2F0dGVyX2dyb3VwcyA8LSBmc19waW4gJT4lIA0KICBtdXRhdGUodG90YWxfZXZlbnRzID0gYmF0dGxlcyArIGV4cGxvc2lvbnNfcmVtb3RlX3Zpb2xlbmNlICsgcHJvdGVzdHNfYW5kX3Jpb3RzICsgc3RyYXRlZ2ljX2RldmVsb3BtZW50cyArDQogICAgICAgICAgIHZpb2xlbmNlX2FnYWluc3RfY2l2aWxpYW5zKSAlPiUgDQogIGZpbHRlcihzdGF0ZSAlaW4lIGMoIktheWFoIiwgIktheWluIiwgIk1vbiIsICJUYW5pbnRoYXJ5aSIsICJTaGFuIChTb3V0aCkiKSkgJT4lIA0KICBnZ3Bsb3QoYWVzKHggPSB0b3RhbF9ldmVudHMsIHkgPSBmYXRhbGl0aWVzLCBjb2xvdXIgPSBncm91cCwgDQogICAgICAgICAgICAgdGV4dCA9IHBhc3RlMCh0b3duc2hpcCwgIiwiLCAiXG4iLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUsICIsIiwgIlxuIiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJncm91cDogIiwgZ3JvdXAsICIsIiwgIlxuIiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJldmVudHM6ICIsIHRvdGFsX2V2ZW50cywgIiwiLCAiXG4iLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgImZhdGFsaXRpZXM6ICIsIGZhdGFsaXRpZXMsICIsIiwgIlxuIiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJwYXJ0bmVyczogIiwgcGFydG5lcnNfMjAyMSkpKSArDQogIGdlb21fcG9pbnQoYWVzKHNpemUgPSBmYXRhbGl0aWVzKSwgYWxwaGEgPSAwLjg1KSArDQogIHNjYWxlX3lfY29udGludW91cyh0cmFucyA9ICJsb2cxMCIsIGJyZWFrcyA9IGMoMCwgMSwgMTAsIDMwLCAxMDAsIDMwMCwgMTAwMCkpICsNCiAgc2NhbGVfeF9jb250aW51b3VzKHRyYW5zID0gImxvZzEwIiwgYnJlYWtzID0gYygwLCAxLCAxMCwgMzAsIDEwMCwgMzAwKSkgKw0KICBzY2FsZV9jb2xvdXJfbWFudWFsKHZhbHVlcyA9IGMoIiM1NzVDNkRGRiIsICIjMDAyMDRERkYiLCAiI0M0QjU2Q0ZGIiwgIiNGRkVBNDZGRiIpKSArDQogICMgc2NhbGVfY29sb3VyX3ZpcmlkaXNfZChvcHRpb24gPSAiY2l2aWRpcyIpICsNCiAgZ2VvbV9obGluZShhZXMoeWludGVyY2VwdCA9IG1lYW4oZmF0YWxpdGllcywgbmEucm0gPSBUUlVFKSksIGNvbG91ciA9ICJyZWQiLCBsdHkgPSAyKSArDQogIGdlb21fdmxpbmUoYWVzKHhpbnRlcmNlcHQgPSBtZWFuKHRvdGFsX2V2ZW50cywgbmEucm0gPSBUUlVFKSksIGNvbG91ciA9ICJyZWQiLCBsdHkgPSAyKSArDQogIGxhYnMoeCA9ICJDb25mbGljdCBldmVudHMiLCANCiAgICAgICB5ID0gIkZhdGFsaXRpZXMiLA0KICAgICAgIHRpdGxlID0gIkNvbmZsaWN0IGV2ZW50cyBhbmQgZmF0YWxpdGllcyBieSBwcmlvcml0aXNhdGlvbiBncm91cCIsIA0KICAgICAgIHN1YnRpdGxlID0gIk1lYW5zIG9mIGJvdGggYXhlcyBhcmUgbWFya2VkIGJ5IHRoZSBkb3R0ZWQgcmVkIGxpbmUiLA0KICAgICAgIGNvbG91ciA9ICJncm91cCIsIA0KICAgICAgIHNpemUgPSAiZmF0YWxpdGllcyIpIA0KDQpnZ3Bsb3RseShzY2F0dGVyX2dyb3VwcywgdG9vbHRpcCA9IGMoInRleHQiKSkgJT4lIA0KICAjIGxheW91dChzaG93bGVnZW5kID0gRkFMU0UsIGxlZ2VuZCA9IGxpc3QoZm9udCA9IGxpc3Qoc2l6ZSA9IDYpKSkgJT4lIA0KICBjb25maWcoZGlzcGxheU1vZGVCYXIgPSBGQUxTRSkgJT4lIA0KICBsYXlvdXQodGl0bGUgPSBsaXN0KHRleHQgPSBwYXN0ZTAoIkNvbmZsaWN0IGV2ZW50cyBhbmQgZmF0YWxpdGllcyBieSBwcmlvcml0aXNhdGlvbiBncm91cCIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiPGJyPiIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiPHN1cD4iLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1vdXNlIG92ZXIgZm9yIGRldGFpbHM7IG1lYW5zIG1hcmtlZCBieSByZWQgbGluZXM7IGZhdGFsaXRpZXMgbWFya2VkIGJ5IHNpemUiLCI8L3N1cD4iKSkpDQoNCmBgYA0KDQo8YnI+DQoNCkdyb3VwcyBBMSBhbmQgQTIgY2FuIGJlIGRpc3Rpbmd1aXNoZWQgYnkgdGhlaXIgcG9wdWxhdGlvbiBkZW5zaXR5LCB3aXRoIHRoZSBhdmVyYWdlIHBvcHVsYXRpb24gZGVuc2l0eSBpbiBncm91cCBBMSBiZWluZyBtb3JlIHRoYW4gMTAwIHRpbWVzIGhpZ2hlciB0aGFuIGluIGdyb3VwIEEyLiBUaGUgYXZlcmFnZSBQSU4gcGVyIHRvd25zaGlwIGlzIHNsaWdodGx5IGhpZ2hlciBpbiBncm91cCBBMSB0aGFuIGluIGdyb3VwIEEyLiBUaGUgc2NhdHRlcnBsb3QgYmVsb3cgc2hvd3MgdG93bnNoaXBzIGJ5IHRoZSBudW1iZXIgb2YgcGVvcGxlIGluIG5lZWQgKHgtYXhpcykgYW5kIHRoZSBwb3B1bGF0aW9uIGRlbnNpdHkgKHktYXhpcyksIHdpdGggdGhlIGNvbG91cnMgcmVmbGVjdGluZyB3aGljaCBncm91cCBlYWNoIGJlbG9uZ3MgdG86DQoNCjxicj4NCg0KDQpgYGB7cn0NCnBvcF9zY2F0dGVyIDwtIGZzX3BpbiAlPiUgDQogIG11dGF0ZSh0b3RhbF9ldmVudHMgPSBiYXR0bGVzICsgZXhwbG9zaW9uc19yZW1vdGVfdmlvbGVuY2UgKyBwcm90ZXN0c19hbmRfcmlvdHMgKyBzdHJhdGVnaWNfZGV2ZWxvcG1lbnRzICsNCiAgICAgICAgICAgdmlvbGVuY2VfYWdhaW5zdF9jaXZpbGlhbnMpICU+JQ0KICBmaWx0ZXIoc3RhdGUgJWluJSBjKCJLYXlhaCIsICJLYXlpbiIsICJNb24iLCAiVGFuaW50aGFyeWkiLCAiU2hhbiAoU291dGgpIikpICU+JQ0KICBnZ3Bsb3QoYWVzKHggPSBmc19waW4sIHkgPSBwb3B1bGF0aW9uX2RlbnNpdHksIGNvbG91ciA9IGdyb3VwLA0KICAgICAgICAgICAgIHRleHQgPSBwYXN0ZTAodG93bnNoaXAsICIsIiwgIlxuIiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlLCAiLCIsICJcbiIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAiZ3JvdXA6ICIsIGdyb3VwLCAiLCIsICJcbiIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAiZXZlbnRzOiAiLCB0b3RhbF9ldmVudHMsICIsIiwgIlxuIiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJmYXRhbGl0aWVzOiAiLCBmYXRhbGl0aWVzLCAiLCIsICJcbiIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAicGFydG5lcnM6ICIsIHBhcnRuZXJzXzIwMjEpKSkgKw0KICBnZW9tX3BvaW50KGFlcyhzaXplID0gY29uZmxpY3Rfc2NvcmUpLCBhbHBoYSA9IDAuODUpICsNCiAgc2NhbGVfY29sb3VyX21hbnVhbCh2YWx1ZXMgPSBjKCIjNTc1QzZERkYiLCAiIzAwMjA0REZGIiwgIiNDNEI1NkNGRiIsICIjRkZFQTQ2RkYiKSkgKw0KICAjIHNjYWxlX2NvbG91cl92aXJpZGlzX2Qob3B0aW9uID0gImNpdmlkaXMiKSArDQogIHNjYWxlX3hfY29udGludW91cyhsYWJlbHMgPSBjb21tYSwgdHJhbnMgPSAibG9nMTAiKSArDQogIHNjYWxlX3lfY29udGludW91cyhsYWJlbHMgPSBjb21tYV9mb3JtYXQoYWNjdXJhY3kgPSAxKSwgdHJhbnMgPSAibG9nMTAiKSArDQogIGdlb21faGxpbmUoYWVzKHlpbnRlcmNlcHQgPSBtZWFuKHBvcHVsYXRpb25fZGVuc2l0eSwgbmEucm0gPSBUUlVFKSksIGNvbG91ciA9ICJyZWQiLCBsdHkgPSAyKSArDQogIGdlb21fdmxpbmUoYWVzKHhpbnRlcmNlcHQgPSBtZWFuKGZzX3BpbiwgbmEucm0gPSBUUlVFKSksIGNvbG91ciA9ICJyZWQiLCBsdHkgPSAyKSArDQogIGxhYnMoeCA9ICJQZW9wbGUgaW4gbmVlZCIsIA0KICAgICAgIHkgPSAiUG9wdWxhdGlvbiBkZW5zaXR5IiwNCiAgICAgICB0aXRsZSA9ICJQZW9wbGUgaW4gbmVlZCBhbmQgcG9wdWxhdGlvbiBkZW5zaXR5IGJ5IHByaW9yaXRpc2F0aW9uIGdyb3VwIiwgDQogICAgICAgc3VidGl0bGUgPSAiTWVhbnMgb2YgYm90aCBheGVzIGFyZSBtYXJrZWQgYnkgdGhlIGRvdHRlZCByZWQgbGluZSIsDQogICAgICAgY29sb3VyID0gImdyb3VwIiwgDQogICAgICAgc2l6ZSA9ICJjb25mbGljdFxuc2NvcmUiKSANCg0KZ2dwbG90bHkocG9wX3NjYXR0ZXIsIHRvb2x0aXAgPSBjKCJ0ZXh0IikpICU+JSANCiAgIyBsYXlvdXQoc2hvd2xlZ2VuZCA9IEZBTFNFLCBsZWdlbmQgPSBsaXN0KGZvbnQgPSBsaXN0KHNpemUgPSA2KSkpICU+JSANCiAgY29uZmlnKGRpc3BsYXlNb2RlQmFyID0gRkFMU0UpICU+JSANCiAgbGF5b3V0KHRpdGxlID0gbGlzdCh0ZXh0ID0gcGFzdGUwKCJQZW9wbGUgaW4gbmVlZCBhbmQgcG9wdWxhdGlvbiBkZW5zaXR5IGJ5IHByaW9yaXRpc2F0aW9uIGdyb3VwIiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICI8YnI+IiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICI8c3VwPiIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibW91c2Ugb3ZlciBmb3IgZGV0YWlsczsgbWVhbnMgbWFya2VkIGJ5IHJlZCBsaW5lczsgY29uZmxpY3Qgc2NvcmUgbWFya2VkIGJ5IHNpemUiLCI8L3N1cD4iKSkpDQpgYGANCg0KPGJyPg0KDQpUaGUgdGFibGUgYmVsb3cgcHJvdmlkZXMgc29tZSBzdW1tYXJ5IHN0YXRpc3RpY3MgZm9yIGVhY2ggb2YgdGhlIGZvdXIgZ3JvdXBzLiBJbmNsdWRlZCBhcmUgdGhlIFBJTiBhbmQgcG9wdWxhdGlvbiB0YXJnZXRlZCB3aXRoaW4gdGhlIHRvd25zaGlwcyBpbiBlYWNoIGdyb3VwLCB0aGUgYXZlcmFnZSBjb25mbGljdCBzY29yZSAoaGlnaGVyIGNvbmZsaWN0IHNjb3JlcyBpbmRpY2F0ZSBhIGhpZ2hlciBpbmNpZGVuY2Ugb2YgY29uZmxpY3QpLCB0aGUgYXZlcmFnZSBwb3B1bGF0aW9uIGRlbnNpdHkgYW5kIHRoZSBudW1iZXIgb2YgdG93bnNoaXBzIHdpdGhpbiBlYWNoIGdyb3VwOiANCg0KPGJyPg0KDQpgYGB7ciB0YWJsZS1zdW1tYXJ5LXN0YXRzLWdyb3VwfQ0KZnNfcGluICU+JQ0KICBmaWx0ZXIoc3RhdGUgJWluJSBjKCJLYXlhaCIsICJLYXlpbiIsICJNb24iLCAiVGFuaW50aGFyeWkiLCAiU2hhbiAoU291dGgpIikpICU+JQ0KICBncm91cF9ieShncm91cCkgJT4lIA0KICBzdW1tYXJpc2UoUElOID0gc3VtKGZzX3BpbiksIA0KICAgICAgICAgICAgdGFyZ2V0ID0gc3VtKGZzX3RhcmdldGVkKSwNCiAgICAgICAgICAgIGNvbmZsaWN0X3Njb3JlID0gbWVhbihjb25mbGljdF9zY29yZSksDQogICAgICAgICAgICBwcGxfcGVyX2ttMiA9IG1lYW4ocG9wdWxhdGlvbl9kZW5zaXR5KSwNCiAgICAgICAgICAgIHRvd25zaGlwcyA9IG4oKSkgJT4lIA0KICBtdXRhdGVfYXQodmFycyhjKGNvbmZsaWN0X3Njb3JlKSksIH5yb3VuZCguLCBkaWdpdHMgPSAzKSkgJT4lIA0KICBtdXRhdGVfYXQodmFycyhjKFBJTiwgcHBsX3Blcl9rbTIsIHRhcmdldCkpLCB+IHJvdW5kKC4pKSAlPiUgDQogIGthYmxlKGNhcHRpb24gPSAiU3VtbWFyeSBzdGF0aXN0aWNzIGJ5IHRvd25zaGlwIGdyb3VwIiwgZm9ybWF0LmFyZ3MgPSBsaXN0KGJpZy5tYXJrID0gIiwiKSkgJT4lIA0KICBrYWJsZV9jbGFzc2ljXzIoInN0cmlwZWQiKSAlPiUgDQogIGZvb3Rub3RlKGZvb3Rub3RlX2FzX2NodW5rID0gVFJVRSwgdGhyZWVwYXJ0dGFibGUgPSBUUlVFLCANCiAgICAgICAgICAgZ2VuZXJhbCA9ICJHcm91cHMgQTEgYW5kIEEyIGhhdmUgYWJvdmUgYXZlcmFnZSBjb25mbGljdCBzY29yZXM7IGdyb3VwcyBBMSBhbmQgQjEgaGF2ZSB0aGUgYWJvdmUgYXZlcmFnZSBwb3B1bGF0aW9uIGRlbnNpdGllcy4gVG93bnNoaXBzIGluIGdyb3VwcyBBMSBhbmQgQTIgc2hvdWxkIGJlIHByaW9yaXRpc2VkIG92ZXIgdGhlIG90aGVycy4iKSANCg0KIyAlPiUNCiMgIHNhdmVfa2FibGUoZmlsZSA9ICJzdW1tYXJ5X3N0YXRzX2dyb3Vwcy5wbmciLCB6b29tID0gMikNCiAgDQpgYGANCg0KPGJyPjxicj4NCg0KIyMjIDEuMiBNYXBzIG9mIGNvbmZsaWN0IHNjb3JlcyBhbmQgcHJpb3JpdGlzYXRpb24gZ3JvdXANCg0KYGBge3IgbWFwLWNvbmZsaWN0LXNjb3JlLCBmaWcuaGVpZ2h0PTl9DQoNCmZzX3BpbiAlPiUgDQogIHJpZ2h0X2pvaW4ocGNvZGUzX3NoYXBlLCBieSA9ICJhZG1pbjNfcGNvZGUiKSAlPiUgDQogIHN0X2FzX3NmKCkgJT4lIA0KICBnZ3Bsb3QoKSArDQogIGdlb21fc2YoYWVzKGZpbGwgPSBjb25mbGljdF9zY29yZSksIHNpemUgPSAwLjEpICsgDQogIGdlb21fc2YoZGF0YSA9IHBjb2RlMV9zaGFwZSwgYWxwaGEgPSAwLCBjb2xvdXIgPSAiYmxhY2siLCBzaXplID0gMC41KSArIA0KICBzY2FsZV9maWxsX3ZpcmlkaXNfYyhvcHRpb24gPSAibWFnbWEiLCBkaXJlY3Rpb24gPSAtMSkgKw0KICB0aGVtZV92b2lkKCkgKyANCiAgbGFicyh0aXRsZSA9ICJDb25mbGljdCBzY29yZSBieSB0b3duc2hpcCAyMDIxIiwNCiAgICAgICBjYXB0aW9uID0gIkRhdGEgc291cmNlOiBBQ0xFRDsgYWNsZWRkYXRhLmNvbSIsDQogICAgICAgZmlsbCA9ICJDb25mbGljdFxuc2NvcmUiKSArDQogIHRoZW1lKHBsb3QuY2FwdGlvbj1lbGVtZW50X3RleHQoaGp1c3QgPSAwLjUpLCANCiAgICAgICAgcGxvdC5iYWNrZ3JvdW5kID0gZWxlbWVudF9yZWN0KGZpbGwgPSAid2hpdGUiLCBjb2xvdXIgPSBOQSkpICsNCg0KZnNfcGluICU+JSANCiAgbGVmdF9qb2luKHBjb2RlM19zaGFwZSwgYnkgPSAiYWRtaW4zX3Bjb2RlIikgJT4lIA0KICBzdF9hc19zZigpICU+JSANCiAgZ2dwbG90KCkgKyANCiAgZ2VvbV9zZihhZXMoZmlsbCA9IGdyb3VwKSwgc2l6ZSA9IDAuMSwgY29sb3VyID0gImdyYXkyMCIpICsgDQogIGdlb21fc2YoZGF0YSA9IHBjb2RlMV9zaGFwZSwgYWxwaGEgPSAwLCBjb2xvdXIgPSAiYmxhY2siLCBzaXplID0gMC41KSArDQogIHNjYWxlX2ZpbGxfbWFudWFsKHZhbHVlcyA9IGMoIiM1NzVDNkRGRiIsICIjMDAyMDRERkYiLCAiI0M0QjU2Q0ZGIiwgIiNGRkVBNDZGRiIpKSArDQogICMgc2NhbGVfZmlsbF92aXJpZGlzX2QoZW5kID0gMC45LCBvcHRpb24gPSAiY2l2aWRpcyIpICsNCiAgdGhlbWVfdm9pZCgpICsNCiAgbGFicyh0aXRsZSA9ICJUb3duc2hpcHMgYnkgcHJpb3JpdGlzYXRpb24gZ3JvdXAiLCANCiAgICAgICBmaWxsID0gInByaW9yaS1cbnRpc2F0aW9uXG5ncm91cCIsDQogICAgICAgY2FwdGlvbiA9ICJEYXRhIHNvdXJjZTogQUNMRUQ7IGFjbGVkZGF0YS5jb20gYW5kIEZTQyBjYWxjdWxhdGlvbnMiKSArDQogIHRoZW1lKHBsb3QuY2FwdGlvbj1lbGVtZW50X3RleHQoaGp1c3QgPSAwLjUpLCANCiAgICAgICAgcGxvdC5iYWNrZ3JvdW5kID0gZWxlbWVudF9yZWN0KGZpbGwgPSAid2hpdGUiLCBjb2xvdXIgPSBOQSkpICANCiAgDQojIGdnc2F2ZSgiY29uZmxpY3Rfc2NvcmVfbWFwLnBuZyIsIGRwaSA9IDMwMCwgaGVpZ2h0ID0gMTIsIHdpZHRoID0gNywgdW5pdHMgPSAiaW4iKQ0KYGBgDQoNCjxicj48YnI+DQoNCiMjIyAxLjMgUmVmZXJlbmNlIHRhYmxlIGZvciBjb25mbGljdCB2YXJpYWJsZXMNCg0KQmVsb3cgaXMgYW4gaW50ZXJhY3RpdmUgcmVmZXJlbmNlIHRhYmxlIGZvciB0aGUgdmFyaW91cyB0eXBlcyBvZiBjb25mbGljdCBldmVudHMgYnkgdG93bnNoaXAuIEl0IGFsc28gaW5jbHVkZXMgdGhlIG92ZXJhbGwgY29uZmxpY3Qgc2NvcmUgYW5kIHByaW9yaXRpc2F0aW9uIGdyb3Vwcy4gVGhlIHNlYXJjaCBiYXIgY2FuIGJlIHVzZWQgdG8gZmluZCBzcGVjaWZpYyB0b3duc2hpcHMsIG9yIGFueSBvZiB0aGUgY29sdW1ucyBtYXkgYmUgc29ydGVkIGFjY29yZGluZyB0byBhc2NlbmRpbmcgb3IgZGVzY2VuZGluZyB2YWx1ZXMuIFRoZSB0YWJsZSBjdXJyZW50bHkgc2hvd3MgdG93bnNoaXBzIGluIGRlc2NlbmRpbmcgb3JkZXIgb2YgY29uZmxpY3Qgc2NvcmUuIA0KDQo8YnI+DQoNCmBgYHtyfQ0KZnNfcGluICU+JSANCiAgZmlsdGVyKHN0YXRlICVpbiUgYygiS2F5YWgiLCAiS2F5aW4iLCAiTW9uIiwgIlRhbmludGhhcnlpIiwgIlNoYW4gKFNvdXRoKSIpKSAlPiUNCiAgc2VsZWN0KHN0YXRlLCB0b3duc2hpcCwgcG9wXzIwMjEgPSBwb3B1bGF0aW9uXzIwMjFfcHJvaiwgcHBsX2ttMiA9IHBvcHVsYXRpb25fZGVuc2l0eSwgDQogICAgICAgICBQSU4gPSBmc19waW4sIHRhcmdldCA9IGZzX3RhcmdldGVkLA0KICAgICAgICAgZ3JvdXAsIGNvbmZsaWN0X3Njb3JlLCBmYXRhbGl0aWVzLA0KICAgICAgICAgYmF0dGxlcywgZXhwbG9zaW9uc19yZW1vdGVfdmlvbGVuY2UsIHByb3Rlc3RzX2FuZF9yaW90cywgc3RyYXRlZ2ljX2RldmVsb3BtZW50cywgdmlvbGVuY2VfYWdhaW5zdF9jaXZpbGlhbnMsDQogICAgICAgICBhZG1pbjNfcGNvZGUpICU+JSANCiAgYXJyYW5nZShkZXNjKGNvbmZsaWN0X3Njb3JlKSkgJT4lIA0KICBkYXRhdGFibGUoZmlsdGVyID0gbGlzdChwb3NpdGlvbiA9ICJ0b3AiLCBjbGVhciA9IEZBTFNFKSwNCiAgICAgICAgICAgIG9wdGlvbnMgPSBsaXN0KHBhZ2VMZW5ndGggPSAxMCwgc2Nyb2xsWCA9IFRSVUUpLA0KICAgICAgICAgICAgY2FwdGlvbiA9IGh0bWx0b29sczo6dGFncyRjYXB0aW9uKHN0eWxlID0gImNhcHRpb24tc2lkZTogdG9wOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjsgZm9udC1zaXplOiAxNDAlOyIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjIwMjEgY29uZmxpY3QgaW5kaWNhdG9ycyBieSB0b3duc2hpcCIpKSAlPiUgDQogIGZvcm1hdFJvdW5kKGMoInBvcF8yMDIxIiwgInBwbF9rbTIiLCAidGFyZ2V0IiwgIlBJTiIpLCBkaWdpdHMgPSAwKSAlPiUgDQogIGZvcm1hdFJvdW5kKGMoImNvbmZsaWN0X3Njb3JlIiksIGRpZ2l0cyA9IDIpDQogDQpgYGANCg0KPGJyPjxicj48YnI+DQoNCg0KIyMgMi4gRGlzdHJpYnV0aW9uIG9mIGZsb29kIHJpc2sgaW4gTXlhbm1hcg0KDQoNCiMjIyAyLjEgSGlzdG9yaWNhbCBmbG9vZCBkYXRhIA0KDQpJbiBsaWdodCBvZiB0aGUgaW1wZW5kaW5nIG1vbnNvb24gc2Vhc29uLCB0aGUgcHJvYmFiaWxpdHkgdGhhdCBhIHRvd25zaGlwIHdpbGwgYmUgYWZmZWN0ZWQgYnkgYSBtYWpvciBmbG9vZCBvciBjeWxjb25pYyBldmVudCBoYXMgYmVlbiBjYWxjdWxhdGVkLiBNYWpvciBmbG9vZHMgc2luY2UgMjAwOCBoYXZlIGJlZW4gZmFjdG9yZWQgaW50byB0aGlzIGNhbGN1bGF0aW9uLiANCg0KRm9yIHRoZSBtb21lbnQsIGNvbmZsaWN0IGluY2lkZW5jZSBhbmQgZmxvb2QgYW5kIGN5Y2xvbmUgcmlzayB3aWxsIGJlIGV2YWx1YXRlZCBzZXBhcmF0ZWx5LiBGbG9vZCBhbmQgc3Rvcm0gc3VyZ2UgcmlzayBleGlzdCBhcyBwcm9iYWJpbGl0aWVzIGZvciB0aGUgbW9tZW50OyB0aGlzIG1pZ2h0IGNoYW5nZSB3ZXJlIHNldmVyZSBmbG9vZGluZyB0byBvY2N1ciBpbiAyMDIyLiANCg0KPGJyPg0KDQpgYGB7ciBiYXJwbG90LWZsb29kLXJpc2t9DQpmbG9vZHNfc3Rvcm1fc3VyZ2UgJT4lIA0KICBzZWxlY3Qoc3RhcnRzX3dpdGgoInllYXJfIiksIGFkbWluM19wY29kZSkgJT4lIA0KICBwaXZvdF9sb25nZXIoY29scyA9IGMoLWFkbWluM19wY29kZSksIG5hbWVzX3RvID0gImZsb29kcyIsIHZhbHVlc190byA9ICJ2YWx1ZSIpICU+JSANCiAgbXV0YXRlKGZsb29kcyA9IHN0cl9yZW1vdmVfYWxsKGZsb29kcywgInllYXJfIikpICU+JSANCiAgZ3JvdXBfYnkoZmxvb2RzKSAlPiUgDQogIGZpbHRlcih2YWx1ZSA9PSBUUlVFKSAlPiUgDQogIHN1bW1hcmlzZSh0b3duc2hpcHNfYWZmZWN0ZWQgPSBuKCkpICU+JSANCiAgbXV0YXRlKGZsb29kcyA9IGZjdF9yZXYoZmxvb2RzKSkgJT4lIA0KICBnZ3Bsb3QoYWVzKHggPSB0b3duc2hpcHNfYWZmZWN0ZWQsIHkgPSBmbG9vZHMsIGZpbGwgPSBmbG9vZHMpKSArIA0KICBnZW9tX2NvbCgpICsgIA0KICB0aGVtZShsZWdlbmQucG9zaXRpb24gPSAibm9uZSIpICsNCiAgbGFicyh5ID0gIiIsIA0KICAgICAgIHggPSAiTnVtYmVyIG9mIHRvd25zaGlwcyBhZmZlY3RlZCIsIA0KICAgICAgIHRpdGxlID0gIlRvd25zaGlwcyBhZmZlY3RlZCBieSBmbG9vZHMgYW5kIHN0b3JtIHN1cmdlcyAoMjAwOC0yMDIxKSIpDQoNCiAjIGdnc2F2ZSgiYnlfZmxvb2RzLnBuZyIsIGRwaSA9IDMwMCwgaGVpZ2h0ID0gNSwgd2lkdGggPSA4LCB1bml0cyA9ICJpbiIpDQpgYGANCg0KPGJyPg0KDQpCYXNlZCBvbiB0aGlzIGRhdGEsIGEgc2NvcmUgd2FzIGNhbGN1bGF0ZWQgZm9yIGVhY2ggdG93bnNoaXAgYmFzZWQgb24gaG93IG1hbnkgdGltZXMgaXQgaGFkIGJlZW4gYWZmZWN0ZWQgYnkgZmxvb2RzIHNpbmNlIDIwMDguIFRoZSB0YWJsZSBiZWxvdyBhbHNvIHN1bW1hcmlzZXMgdGhlIG51bWJlciBvZiBwZW9wbGUgaW4gbmVlZCAoMjAyMikuIGByIGZzX3BpbiAlPiUgZmlsdGVyKGZsb29kX2NvdW50ID4gNCkgJT4lIHtzdW0oLiRmc19waW4pfSAlPiUgcm91bmQoKSAlPiUgZm9ybWF0KGJpZy5tYXJrID0gIiwiKWAgcGVvcGxlIGxpdmUgaW4gdG93bnNoaXBzIHRoYXQgaGF2ZSBmbG9vZGVkIG1vcmUgdGhhbiA1IHRpbWVzIHNpbmNlIDIwMDguIA0KDQpgYGB7cn0NCmZzX3BpbiAlPiUgDQogIHJlcGxhY2VfbmEobGlzdChmbG9vZF9jb3VudCA9IDApKSAlPiUgDQogICMgbXV0YXRlKGZsb29kX2NvdW50ID0gaWZlbHNlKGZsb29kX2NvdW50ID4gNCwgIjUtOSIsIGZsb29kX2NvdW50KSkgJT4lIA0KICBncm91cF9ieShmbG9vZF9jb3VudCkgJT4lIA0KICBzdW1tYXJpc2UodG93bnNoaXBzID0gbigpLA0KICAgICAgICAgICAgcGVvcGxlX2luX25lZWQgPSByb3VuZChzdW0oZnNfcGluKSwgZGlnaXRzID0gMCkpICU+JSANCiAgYXJyYW5nZShkZXNjKGZsb29kX2NvdW50KSkgJT4lIA0KICBrYWJsZShjYXB0aW9uID0gIlN1bW1hcnkgc3RhdGlzdGljcyBieSBudW1iZXIgb2YgZmxvb2RzICgyMDA4LTIwMjEpIiwgZm9ybWF0LmFyZ3MgPSBsaXN0KGJpZy5tYXJrID0gIiwiKSkgJT4lIA0KICBrYWJsZV9jbGFzc2ljXzIoInN0cmlwZWQiLCBmdWxsX3dpZHRoID0gRkFMU0UpDQoNCmBgYA0KDQo8YnI+PGJyPg0KDQojIyMgMi4yIE1hcCBvZiBmbG9vZCByaXNrIA0KDQpUaGUgbWFwIGJlbG93IHNob3dzIHRoZSBwcm9iYWJpbGl0eSBvZiBlYWNoIHRvd25zaGlwIGJlaW5nIGFmZmVjdGVkIGJ5IGZsb29kcy4gVGhlIGFyZWFzIHdpdGggdGhlIGdyZWF0ZXN0IHJpc2sgb2YgZmxvb2RpbmcgYXJlIGluIE1vbiwgbmVhciB0aGUgbW91dGggb2YgdGhlIFNpdHRhdW5nIFJpdmVyIGFuZCB0aGUgR3VsZiBvZiBNb3R0YW1hIGFuZCB0aG9zZSBhbG9uZyB0aGUgQXlleWFyd2FkeSBSaXZlciwgYW5kIHRvIGEgbGVzc2VyIGV4dGVudCwgYWxvbmcgdGhlIENoaW5kd2luIFJpdmVyLiANCg0KPGJyPg0KDQpgYGB7ciBtYXAtZmxvb2RzLCBmaWcuaGVpZ2h0ID0gMTJ9DQoNCmZzX3BpbiAlPiUgDQogIGxlZnRfam9pbihwY29kZTNfc2hhcGUsIGJ5ID0gImFkbWluM19wY29kZSIpICU+JSANCiAgc3RfYXNfc2YoKSAlPiUgDQogIGdncGxvdCgpICsNCiAgZ2VvbV9zZihzaXplID0gMC4xLCBhZXMoZmlsbCA9IGZsb29kX3Byb2IpKSArDQogIGdlb21fc2YoZGF0YSA9IHBjb2RlMV9zaGFwZSwgc2l6ZSA9IDAuNSwgYWxwaGEgPSAwLCBjb2xvdXIgPSAiZ3JheTIwIikgKw0KICBzY2FsZV9maWxsX3ZpcmlkaXMob3B0aW9uID0gInBsYXNtYSIsIGRpcmVjdGlvbiA9IC0xLCBsYWJlbCA9IHBlcmNlbnRfZm9ybWF0KGFjY3VyYWN5ID0gMSkpICsNCiAgdGhlbWVfdm9pZCgpICsNCiAgdGhlbWUocGxvdC5iYWNrZ3JvdW5kID0gZWxlbWVudF9yZWN0KGZpbGwgPSAid2hpdGUiLCBjb2xvdXIgPSBOQSksDQogICAgICAgIHBsb3QuY2FwdGlvbiA9IGVsZW1lbnRfdGV4dChoanVzdCA9IDAuNSkpICsNCiAgbGFicyh0aXRsZSA9ICJGbG9vZCByaXNrIGluIE15YW5tYXIgKDIwMDgtMjAyMSkiLCANCiAgICAgICBmaWxsID0gImZsb29kXG5yaXNrIiwgDQogICAgICAgY2FwdGlvbiA9ICAiRGF0YSBzb3VyY2U6IE1JTVUgYW5kIFVORFAiKQ0KDQojIGdnc2F2ZSgiZmxvb2Rfcmlzay5wbmciLCBkcGkgPSAzMDAsIGhlaWdodCA9IDEyLCB3aWR0aCA9IDcsIHVuaXRzID0gImluIikNCmBgYA0KDQo8YnI+PGJyPg0KDQojIyMgMi4zIFJlZmVyZW5jZSB0YWJsZSBmb3IgZmxvb2QgcmlzayANCg0KQmVsb3cgaXMgYW4gaW50ZXJhY3RpdmUgcmVmZXJlbmNlIHRhYmxlIGZvciBmbG9vZCByaXNrIGJ5IHRvd25zaGlwLiBJdCBpbmNsdWRlcyB0aGUgbnVtYmVyIG9mIHRpbWVzIHNpbmNlIDIwMDggYSB0b3duc2hpcCBoYXMgYmVlbiBhZmZlY3RlZCBieSBmbG9vZGluZyAoZmxvb2RfY291bnQpIGFuZCB0aGUgcHJvYmFiaWxpdHkgb2YgZmxvb2RpbmcgKGZsb29kX3Jpc2spLiBTaW1pbGFyIHRvIHRoZSBpbnRlcmFjdGl2ZSB0YWJsZSBpbiB0aGUgcHJldmlvdXMgY2hhcHRlciwgdGhlIHNlYXJjaCBiYXIgY2FuIGJlIHVzZWQgdG8gZmluZCBzcGVjaWZpYyB0b3duc2hpcHMgYW5kIGFueSBvZiB0aGUgY29sdW1ucyBtYXkgYmUgc29ydGVkIGFjY29yZGluZyB0byBhc2NlbmRpbmcgb3IgZGVzY2VuZGluZyB2YWx1ZXMuIFRoZSB0YWJsZSBjdXJyZW50bHkgc2hvd3MgdG93bnNoaXBzIHNvcnRlZCBpbiBkZXNjZW5kaW5nIG9yZGVyIG9mIGZsb29kIHJpc2suDQoNCjxicj4NCg0KDQpgYGB7cn0NCmZzX3BpbiAlPiUgDQogIGZpbHRlcihzdGF0ZSAlaW4lIGMoIktheWFoIiwgIktheWluIiwgIk1vbiIsICJUYW5pbnRoYXJ5aSIsICJTaGFuIChTb3V0aCkiKSkgJT4lDQogIHNlbGVjdChzdGF0ZSwgdG93bnNoaXAsIHBvcF8yMDIxID0gcG9wdWxhdGlvbl8yMDIxX3Byb2osIHBwbF9rbTIgPSBwb3B1bGF0aW9uX2RlbnNpdHksIA0KICAgICAgICAgUElOID0gZnNfcGluLCB0YXJnZXQgPSBmc190YXJnZXRlZCwNCiAgICAgICAgIGZsb29kX3Jpc2sgPSBmbG9vZF9wcm9iLCBmbG9vZF9jb3VudCwNCiAgICAgICAgIGFkbWluM19wY29kZSkgJT4lIA0KICBhcnJhbmdlKGRlc2MoZmxvb2RfcmlzaykpICU+JSANCiAgZGF0YXRhYmxlKGZpbHRlciA9IGxpc3QocG9zaXRpb24gPSAidG9wIiwgY2xlYXIgPSBGQUxTRSksDQogICAgICAgICAgICBvcHRpb25zID0gbGlzdChwYWdlTGVuZ3RoID0gMTAsIHNjcm9sbFggPSBUUlVFKSwNCiAgICAgICAgICAgIGNhcHRpb24gPSBodG1sdG9vbHM6OnRhZ3MkY2FwdGlvbihzdHlsZSA9ICJjYXB0aW9uLXNpZGU6IHRvcDsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7IGZvbnQtc2l6ZTogMTQwJTsiLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJGbG9vZCByaXNrIGJ5IHRvd25zaGlwIikpICU+JSANCiAgZm9ybWF0Um91bmQoYygicG9wXzIwMjEiLCAicHBsX2ttMiIsICJ0YXJnZXQiLCAiUElOIiksIGRpZ2l0cyA9IDApICU+JSANCiAgZm9ybWF0Um91bmQoYygiZmxvb2RfcmlzayIpLCBkaWdpdHMgPSAyKQ0KIA0KYGBgDQo=